package com.ls.lserp.modules.job.web;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.ls.lserp.common.dynamicsource.DataSourceContextHolder;
import com.ls.lserp.common.utils.DateUtils;
import com.ls.lserp.common.utils.ResourcesUtil;
import com.ls.lserp.common.utils.SpringContextHolder;
import com.ls.lserp.common.web.BaseController;
import com.ls.lserp.dbaccess.Entity.AccountingMtmEntity;
import com.ls.lserp.dbaccess.Entity.AccountingOrderEntity;
import com.ls.lserp.dbaccess.Entity.MaterialCustomEntity;
import com.ls.lserp.modules.job.entity.OrderSyncJobCache;
import com.ls.lserp.modules.job.service.OrderSyncService;
import com.ls.lserp.modules.order.service.OrderService;

/**
 * @ClassName : MTMtoERPDataBaseSyncJob
 * @Description : 平台数据与ERP同步
 *
 * @author : shaoyun.tan
 * @date : 2017年9月21日
 */
public class MTMtoERPDataBaseSyncJob extends BaseController {

	// 平台与ERP数据同步(订单相关数据)
	@Autowired
	private OrderSyncService orderSyncService = SpringContextHolder.getBean(OrderSyncService.class);

	// ERP保存平台数据
	@Autowired
	private OrderService orderService;

	/**
	 * @Title : dataBaseSync
	 * @Description : 平台数据与ERP同步
	 * @return : void
	 *
	 * @author : shaoyun.tan
	 * @throws Exception
	 * @date : 2017年9月21日
	 */
	public String dataBaseSync(){
		try {
			// 获取开始日期时间
			String nowDateTime = DateUtils.getDateTime();
			
			logger.info("--------------------" + nowDateTime + "平台数据与ERP同步 [" + this.getClass().getName()
					+ "] 开始------------------------");
			
			// 切换MTM数据库，获取订单数据,同时更新订单状态为待生产
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_MTMSQL);
			OrderSyncJobCache orderSyncJobCache = new OrderSyncJobCache();
			/*
			 * Calendar calendar = Calendar.getInstance();//此时打印它获取的是系统当前时间
			 * calendar.add(Calendar.DATE, -1); //得到前一天
			 * orderSyncJobCache.setDateTime(calendar.getTime());
			 * System.out.println(new
			 * SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
			 */
			List<OrderSyncJobCache> cloudList = orderSyncService.findAllList(orderSyncJobCache,"ORDER_STATUS-OS_20");
			// 获取平台自带面料数据
			List<MaterialCustomEntity> materialList = orderSyncService.findCustomMaterialList(new MaterialCustomEntity());
			// 已付款状态交易单数据集
			//List<AccountingMtmEntity> accountingMtmPaidList = orderSyncService.findAccountingList(ResourcesUtil.getConfig("Paid_13"));
			// 交易单订单数据集
			List<AccountingOrderEntity> accountingOrderList = orderSyncService.findAccountingOrderList("0", "0");
			// 导入的订单的相关交易单信息
			//List<AccountingMtmEntity> relevantAccountingMtmList = orderSyncService.findRelevantAccountingList();
			// 切换ERP数据库，导入订单数据
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// 获取平台自带面料数据保存到ERP数据库中
			orderSyncService.insertCustomMaterial(materialList);
			// 同步已付款交易单数据
			//orderSyncService.insertAccountingOfPaid(accountingMtmPaidList);
			orderSyncService.insertAccountingOrder(accountingOrderList);
			// 订单数据保存到ERP数据库中
			orderService.insertExcelDataBeforeMTM(cloudList);
			// 切换MTM数据库，同时更新状态
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_MTMSQL);
			// 更新订单状态
			orderSyncService.updateAllOrderStatusMTM(cloudList);
			// 更新交易单订单同步状态
			orderSyncService.updateAccountingOrder("0", null,"1");
			// 更新自带面料状态
			orderSyncService.updateCustomMaterialStatus(materialList);
			// 生产中消息推送
			//orderSyncService.sendProductingNoticeMsg(relevantAccountingMtmList);
			nowDateTime = DateUtils.getDateTime();
			// 切换ERP数据库
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			logger.info("--------------------" + nowDateTime + "平台数据与ERP同步 [" + this.getClass().getName()
					+ "] 结束------------------------");
			return "success";
		} catch (Exception e) {
			// 切换ERP数据库
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// TODO: handle exception
			logger.error(e.getMessage(),e);
			return "fail";
		}

	}
	
	/**
	 * @Title : dataBaseSync
	 * @Description : 平台数据与ERP同步
	 * @return : void
	 *
	 * @author : shaoyun.tan
	 * @throws Exception
	 * @date : 2017年9月21日
	 */
	public String dataBaseSync_Mark(){
		try {
			// 获取开始日期时间
			String nowDateTime = DateUtils.getDateTime();
			
			logger.info("--------------------" + nowDateTime + "平台数据与ERP同步 [" + this.getClass().getName()
					+ "] 开始------------------------");
			
			// 切换MTM数据库，获取订单数据,同时更新订单状态为待生产
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ALISQL);
			OrderSyncJobCache orderSyncJobCache = new OrderSyncJobCache();
			/*
			 * Calendar calendar = Calendar.getInstance();//此时打印它获取的是系统当前时间
			 * calendar.add(Calendar.DATE, -1); //得到前一天
			 * orderSyncJobCache.setDateTime(calendar.getTime());
			 * System.out.println(new
			 * SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
			 */
			List<OrderSyncJobCache> cloudList = orderSyncService.findAllList(orderSyncJobCache,"ORDER_STATUS-OS_13");
			// 获取平台自带面料数据
			List<MaterialCustomEntity> materialList = orderSyncService.findCustomMaterialList(new MaterialCustomEntity());
			// 已付款状态交易单数据集
			List<AccountingMtmEntity> accountingMtmPaidList = orderSyncService.findAccountingList(ResourcesUtil.getConfig("Paid_13"));
			// 导入的订单的相关交易单信息
			List<AccountingMtmEntity> relevantAccountingMtmList = orderSyncService.findRelevantAccountingList();
			// 切换ERP数据库，导入订单数据
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// 获取平台自带面料数据保存到ERP数据库中
			orderSyncService.insertCustomMaterial(materialList);
			// 同步已付款交易单数据
			orderSyncService.insertAccountingOfPaid(accountingMtmPaidList);
			// 订单数据保存到ERP数据库中
			orderService.insertExcelDataBeforeMTM(cloudList);
			// 切换MTM数据库，同时更新状态
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ALISQL);
			// 更新订单状态
			orderSyncService.updateAllOrderStatusMTM(cloudList);
			// 更新自带面料状态
			orderSyncService.updateCustomMaterialStatus(materialList);
			// 生产中消息推送
			//orderSyncService.sendProductingNoticeMsg(relevantAccountingMtmList);
			nowDateTime = DateUtils.getDateTime();
			// 切换ERP数据库
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			logger.info("--------------------" + nowDateTime + "平台数据与ERP同步 [" + this.getClass().getName()
					+ "] 结束------------------------");
			return "success";
		} catch (Exception e) {
			// 切换ERP数据库
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// TODO: handle exception
			logger.error(e.getMessage(),e);
			return "fail";
		}

	}
	
	/**
	 * @Title : accountDataBaseSync
	 * @Description : ERP交易单数据与平台同步 
	 * @return : void
	 *
	 * @author : shaoyun.tan
	 * @throws Exception
	 * @date : 2017年9月21日
	 */
	public String accountDataBaseSync(){
		try {
			// 获取开始日期时间
			String nowDateTime = DateUtils.getDateTime();
			
			logger.info("--------------------" + nowDateTime + "ERP交易单数据与平台同步 [" + this.getClass().getName()
					+ "] 开始------------------------");
			
			// 已发货状态交易单数据集
			List<AccountingMtmEntity> accountingMtmShippedList = orderSyncService.findAccountingList(ResourcesUtil.getConfig("Transit_55"));
			// 交易单订单数据集
			List<AccountingOrderEntity> accountingOrderList = orderSyncService.findAccountingOrderList("1", "1");
			// 切换MTM数据库，获取订单数据,同时更新订单状态为待生产
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_MTMSQL);
			// 更新交易单订单同步状态
			orderSyncService.updateAccountingOrder(accountingOrderList);
			// 更新交易快递信息
			orderSyncService.updateAccountingExpressInfo(accountingMtmShippedList);
			// 切换ERP数据库，导入订单数据
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// 更新交易单订单同步状态
			orderSyncService.updateAccountingOrder("1", "1", "2");
			nowDateTime = DateUtils.getDateTime();
			logger.info("--------------------" + nowDateTime + "ERP交易单数据与平台同步 [" + this.getClass().getName()
					+ "] 结束------------------------");
			return "success";
		} catch (Exception e) {
			// 切换ERP数据库
			DataSourceContextHolder.setDbType(DataSourceContextHolder.DATA_SOURCE_ZYSQL);
			// TODO: handle exception
			logger.error(e.getMessage(),e);
			return "fail";
		}

	}

}
